So sánh với macro Hàm_nội_tuyến

Theo truyền thống, trong các ngôn ngữ như C, việc khai triển nội tuyến được thực hiện ở mức mã nguồn bằng cách sử dụng các macro có tham số (parameterized macro). Việc sử dụng hàm nội tuyến mang lại một số lợi điểm so với cách tiếp cận truyền thống này:

  • Các lời gọi macro không thực hiện kiểm tra kiểu dữ liệu, và cũng không kiểm tra xem các tham đối (argument) có được định dạng đúng (well-formed) hay không, trong khi đó các lời gọi hàm thường thực hiện các kiểm tra này.
  • Do các macro của C chỉ thực hiện thay thế văn bản (textual substitution), điều này có thể dẫn tới các hiệu ứng phụ và sự không hiệu quả nằm ngoài dự tính, do việc đánh giá lại các tham đối và trật tự tính toán.
  • Lỗi biên dịch bên trong các macro thường rất khó hiểu, vì chúng là các lỗi trong phần mã đã được khai triển, chứ không phải phần mã do lập trình viên viết. (Lập trình viên có thể sẽ phải xem phần mã biên dịch sơ thảo của mã nguồn (pre-compile) để biết được lỗi xảy ra ở đâu.)
  • Có nhiều cấu trúc mà việc biểu diễn chúng bằng các macro là rất rắc rối hoặc không thể làm được, hoặc phải dùng đến những cú pháp hết sức khác biệt. Các hàm nội tuyến sử dụng cú pháp như các hàm thông thường, và có thể được chuyển thành nội tuyến hoặc bỏ chế độ nội tuyến tùy theo ý muốn một cách dễ dàng.
  • Thông tin tìm lỗi (debug) đối với mã nội tuyến thường hữu ích hơn thông tin dành cho mã macro đã được khai triển. Rất nhiều các bộ biên dịch còn khai triển nội tuyến một số các hàm đệ quy (recursive function) [cần dẫn nguồn]; macro đệ quy thường là không hợp lệ.

Bjarne Stroustrup, người thiết kế C++, nhấn mạnh rằng nên tránh sử dụng macro mỗi khi có thể tránh được, và khuyến khích sử dụng rộng rãi các hàm nội tuyến.

Liên quan